package main

import "fmt"

// 只出现一次的数字：给定一个非空整数数组，除了某个元素只出现一次以外，其余每个元素均出现两次。
// 找出那个只出现了一次的元素。可以使用 for 循环遍历数组，
// 结合 if 条件判断和 map 数据结构来解决，例如通过 map 记录每个元素出现的次数，然后再遍历 map 找到出现次数为1的元素。

func singleNumber(nums []int) int {
	// 定义 map 存储元素出现次数（键：元素值，值：出现次数）
	countMap := make(map[int]int)

	// 第一次遍历：统计每个元素的出现次数
	for _, num := range nums {
		countMap[num]++ // 每遇到一次元素，次数加1
	}

	// 第二次遍历：找到出现次数为1的元素
	for num, count := range countMap {
		if count == 1 {
			return num
		}
	}

	return 0
}

func main() {
	fmt.Println(singleNumber([]int{2, 2, 1}))       // 输出：1（仅1出现一次）
	fmt.Println(singleNumber([]int{4, 1, 2, 1, 2})) // 输出：4（仅4出现一次）
	fmt.Println(singleNumber([]int{1}))             // 输出：1（唯一元素）
}
